package com.yang.core.model;

import lombok.Builder;
import lombok.Data;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 请求上下文
 */
@Data
@Builder
public class RequestContext {

    /**
     * HTTP方法
     */
    private String method;

    /**
     * 请求URL
     */
    private String url;

    /**
     * 请求体
     */
    private Object body;

    /**
     * 请求头
     */
    private Map<String, String> headers;

    /**
     * 附加属性
     */
    @Builder.Default
    private Map<String, Object> attributes = new ConcurrentHashMap<>();

    /**
     * 设置请求头
     */
    public void setHeader(String name, String value) {
        if (headers != null) {
            headers.put(name, value);
        }
    }

    /**
     * 获取请求头
     */
    public String getHeader(String name) {
        return headers != null ? headers.get(name) : null;
    }

    /**
     * 设置请求体
     */
    public void setBody(Object body) {
        this.body = body;
    }

    /**
     * 设置属性
     */
    public void setAttribute(String name, Object value) {
        if (attributes == null) {
            attributes = new ConcurrentHashMap<>();
        }
        attributes.put(name, value);
    }

    /**
     * 获取属性
     */
    public Object getAttribute(String name) {
        return attributes != null ? attributes.get(name) : null;
    }

    /**
     * 移除属性
     */
    public Object removeAttribute(String name) {
        return attributes != null ? attributes.remove(name) : null;
    }
}